#! /bin/bash

# Create a directory
init_conf(){
    mkdir -p ./data/{nameserv,broker-a,broker-a-s}/{logs,store}
    mkdir -p ./data/{broker-a,broker-a-s}/conf
    # 创建相关配置文件
    creat_conf
    # 授权
    sudo chmod -R 777 ./data
}

#Create a configuration file
creat_conf(){
    cat >./data/broker-a/conf/broker.conf <<EOF
brokerClusterName=DefaultCluster
brokerName=broker-a
#0 表示master，>0 表示slave
brokerId=0
#nameServer地址，分号隔开
namesrvAddr=mq-ns:9876
#在发送消息时，自动创建服务器不存在的topic，默认创建的队列数
defaultTopicQueueNums=4
#是否允许broker自动创建topic，建议线下开启，线上关闭
autoCreateTopicEnable=true
#是否允许broker自动创建订阅组，建议线下开始，线上关闭
autoCreateSubscriptionGroup=true
#broker对外服务的监听端口，
#同一台机器部署多个broker，端口号要不同，且端口号之间要相距大些
listenPort=10911
#删除文件的时间节点，默认凌晨4点
deleteWhen=04
#文件保留时间，默认48小时
fileReservedTime=120
#commitLog每个文件的大小，默认大小1g
mapedFileSizeCommitLog=1073741824
#consumeQueue每个文件默认存30w条，根据自身业务进行调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
#检查物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#限制的消息大小
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
#发消息线程池数
sendMessageThreadPoolNums=16
#拉去消息线程池数
pullMessageThreadPoolNums=16
#broker角色：
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#强制指定本机IP，需要根据每台机器进行修改。官方介绍可为空，系统默认自动识别，但多网卡时IP地址可能读取错误
#brokerIP1=192.168.0.100
EOF

    cat >./data/broker-a-s/conf/broker.conf <<EOF
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
namesrvAddr=mq-ns:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
diskMaxUsedSpaceRatio=88
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
sendMessageThreadPoolNums=16
pullMessageThreadPoolNums=16
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#brokerIP1=192.168.0.208
EOF
}

main(){
    docker-compose  ps | grep broker > /dev/null
    if [ $? != 0 ]
    then
        init_conf
        docker-compose up -d
        clear
        docker-compose ps
    else
        echo "Confirm to stop the current service!  yes | no"
        read -p "> "  selet
        case $selet in
        y | yes)
            docker-compose down
            ;;
        n | no)
            exit 0
            ;;
        *)
            echo "请输入 yes | no "
            ;;
        esac
    fi
}

main